iT邦幫忙

2023 iThome 鐵人賽

DAY 18
0
Modern Web

使用 Clojure 當個 Full-stack 開發者系列 第 18

[Day 18] 來介紹好用的Library - SCI

  • 分享至 

  • xImage
  •  

SCI

今天來介紹一些好用的lib,但這些滿看情境的

這個sci簡單說是eval一個string,但是是有條件的執行

什麼意思呢

有時候我們如果臨時要調整東西,但其實這段跟你商業邏輯沒有太大關係,可以直接讀一個string去處理、去改東西

先講改東西

我舉一個經典的例子,是Javascript相關的

我們程式在任意地方埋一段js的文字,但這個文字就可以操控任何dom

而且你要確保不能寫錯,因為純文字沒有任何的工具幫你檢查(但你可以先丟到console跑跑看在貼回去)

這樣形容好像有點難理解XDD 因為不就是改程式然後部屬一版新的就好了

但如果非常緊急的事,我是不是可以先改個文字控制風險,然後在想辦法處理

譬如在任意一個地方 document.querySelector(...).style.display='none'

就把東西關掉了

另一個是可以方便的修改東西

譬如

我在hello/you的ul/li預設有五個

(for [x (range 5)]
    [:li {:md:inline-block "" :ml-4 ""}
     [:a {:href "yyy"}
      x]])

但今天因為需求要變成少一點,我們就必須要重新佈署

(for [x (range 5)
      :when (even? x)]
  [:li {:md:inline-block "" :ml-4 ""}
   [:a {:href "yyy"}
    x]])

但如果寫成文字並限制了他的範圍,是不是就變得相對安全又方便

(let [str-from-somewhere "(->> state (filter odd?))"]
  (for [x (sci/eval-string
           str-from-somewhere
           {:bindings {'state (range 5)}})]
    [:li {:md:inline-block "" :ml-4 ""}
     [:a {:href "yyy"}
      x]]))

另一個案例是發生在文字編輯,純文字混一些參考資料或是要從DB拿資料結合

這樣就可以很簡單的讓使用者檢視但不會開放太多權限


上一篇
[Day 17] 常用語法介紹(三)
下一篇
[Day 19] 來介紹好用的Library - specter
系列文
使用 Clojure 當個 Full-stack 開發者30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言